package br.com.ex6professor;

import java.awt.TextArea;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JOptionPane;


public class Funcionario {

  private int matricula;
  private String cpf, nome, estadoCivil;
  private Calendar dataNascimento,
          dataAdmissao,
          dataDemissao;
  private char sexo;
  private float salario;

  public int getMatricula() {
    return matricula;
  }

  public void setMatricula(int matricula) {
    this.matricula = matricula;
  }

  public String getCpf() {
    return cpf;
  }

  public void setCpf(String cpf) {
    this.cpf = cpf;
  }

  public String getNome() {
    return nome;
  }

  public void setNome(String nome) {
    this.nome = nome;
  }

  public String getEstadoCivil() {
    return estadoCivil;
  }

  public void setEstadoCivil(String estadoCivil) {
    this.estadoCivil = estadoCivil;
  }

  public Calendar getDataNascimento() {
    return dataNascimento;
  }

  public void setDataNascimento(Calendar dataNascimento) {
    this.dataNascimento = dataNascimento;
  }

  public Calendar getDataAdmissao() {
    return dataAdmissao;
  }

  public void setDataAdmissao(Calendar dataAdmissao) {
    this.dataAdmissao = dataAdmissao;
  }

  public Calendar getDataDemissao() {
    return dataDemissao;
  }

  public void setDataDemissao(Calendar dataDemissao) {
    this.dataDemissao = dataDemissao;
  }

  public char getSexo() {
    return sexo;
  }

  public void setSexo(char sexo) {
    this.sexo = sexo;
  }

  public float getSalario() {
    return salario;
  }

  public void setSalario(float salario) {
    this.salario = salario;
  }

  public void cadastrar() {
    final String ESTADOS[] = {"Casado", "Solteiro", "Divorciado", "Viuvo", "Outro"};
    final String SX[] = {"M", "F"};
    setMatricula(new Integer(Helper.lerDados("Matrícula:")));
    setNome(Helper.lerDados("Nome:"));
    setCpf(Helper.lerDados("CPF:"));
    setEstadoCivil(Helper.lerDados("Estado Civil:",
            "Cadastro", JOptionPane.INFORMATION_MESSAGE, ESTADOS, 0));
    setDataNascimento(Helper.toCalendar(
            Helper.lerDados("Data de Nascimento:"), "dd/MM/yyyy"));
    setDataAdmissao(Helper.toCalendar(
            Helper.lerDados("Data de Admissão:"), "dd/MM/yyyy"));
    setDataDemissao(null);
    setSexo(Helper.lerDados(
            "Sexo:", "Cadastro", JOptionPane.INFORMATION_MESSAGE, SX, 0).charAt(0));
    setSalario(new Float(Helper.lerDados("Salário:")));
  }

  public void mostrar() {
    String colunas[] = {"Matrícula",
                        "Nome",
                        "Sexo",
                        "CPF",
                        "Estado Civil",
                        "Data Nascimento",
                        "Data Admissão",
                        "Data Demissão",
                         "Salário"};
    Object dados[] = {
      getMatricula(),
      getNome(),
      getSexo(),
      getCpf(),
      getEstadoCivil(),
      Helper.calendarToString(getDataNascimento(),"dd/MM/yyyy"),
      Helper.calendarToString(getDataAdmissao(),"dd/MM/yyyy"),
      (getDataDemissao() == null)?"Sem Demissão":
      Helper.calendarToString(getDataDemissao(),"dd/MM/yyyy"),      
      getSalario()
    };
    StringBuilder saida = new StringBuilder();
    for(int i=0; i < colunas.length;i++){
      saida.append((i!=0)?"\n":"").append(colunas[i]);
      saida.append(":").append(dados[i]);
    }
    TextArea area = new TextArea(saida.toString());
    area.setEditable(false);
    Helper.escreverDados(area);       
  }
  
  public int calcularIdade(){
    Calendar hoje = Calendar.getInstance();
    hoje.setTime(new Date());
    int ddNasc = getDataNascimento().get(Calendar.DAY_OF_MONTH);
    ddNasc += getDataNascimento().get(Calendar.MONTH) * 30;
    ddNasc += getDataNascimento().get(Calendar.YEAR) * 365;
    
    int ddhoje = hoje.get(Calendar.DAY_OF_MONTH);
    ddhoje += hoje.get(Calendar.MONTH) * 30;
    ddhoje += hoje.get(Calendar.YEAR) * 365;
    
    return (ddhoje - ddNasc)/365;
    
  }
  
  public void demitir(){
    Calendar calendario = Calendar.getInstance();
    calendario.setTime(new Date());
    setDataDemissao(calendario);
        /*
     setDataDemissao(Calendar.getInstance());
     getDataAdmissao().setTime(new Date());
    */
    
  }
  
  public void atualizarEm(float percentual){
    setSalario(getSalario()+
            (getSalario()*(percentual/100f)));
  }
  
  public boolean validarCpf(){
     String codigo = getCpf().replaceAll("[.-]","");
     if((codigo.length()!=11) ||
        (codigo.replaceAll("[^0-9]","").length()!=11))
         return false;
     for(int i=0; i < 10;i++){
       if(codigo.replaceAll(i+"","").isEmpty())
         return false;   
     }
     int d1,d2,resto,soma=0;
     for(int i=0; i < codigo.length()-2;i++){
         soma = soma +
         new Integer(codigo.charAt(i)+"")*(10-i); 
     }
     resto = soma % 11;
     d1 = (resto == 0 || resto ==1)?0:11-resto;
     if(d1 != new Integer(codigo.charAt(9)+""))
       return false;
     soma = d1 * 2;
     for(int i=0; i < codigo.length()-2;i++){
         soma = soma +
         new Integer(codigo.charAt(i)+"")*(11-i); 
     }
     resto = soma % 11;
     d2 = (resto == 0 || resto ==1)?0:11-resto;
     if(!(d2+"").equals(codigo.charAt(10)+""))
       return false;
     
     return true;     
     
  }
  
}
